package svl;

import java.io.IOException;
import java.net.InetAddress;
import java.util.ArrayList;
import java.sql.Date;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import dto.ClienteTO;
import dto.DomicilioTO;
import dto.ItemListaDePrecioTO;
import dto.ItemSolicitudDeCotizacionTO;
import dto.RodamientoTO;
import dto.SolicitudDeCotizacionTO;
import dto.TelefonoTO;
import Delegado.BD;


/**
 * Servlet implementation class solicitudCotizacion
 */
@WebServlet("/SolicitudCotizacion")
public class SolicitudCotizacion extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SolicitudCotizacion() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String codigo = request.getParameter("codigo");
		String serie = request.getParameter("serie");
		String marca = request.getParameter("marca");
		String origen = request.getParameter("origen");
		
		BD del = new BD();
		del.LookupService(InetAddress.getLocalHost().getHostAddress());
		
		List<ItemListaDePrecioTO> lista = del.obtenerListaMejoresPrecios(marca, origen, codigo, serie, true);
		
		List<RodamientoTO> rodamientos = new ArrayList<RodamientoTO>();
		
		for (ItemListaDePrecioTO itemlista : lista) 
		{
			rodamientos.add(itemlista.getRodamiento());
		}
		
		request.setAttribute("rodamientos", rodamientos); 
		
		String dire = "/jsp/SolicitudCotizacion.jsp";
		RequestDispatcher dispatcher = request.getRequestDispatcher(dire);
	    dispatcher.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		HttpSession session = request.getSession(true);
		
		SolicitudDeCotizacionTO sc = (SolicitudDeCotizacionTO)session.getAttribute("solicitud");
		
		BD del = new BD();
		del.LookupService(InetAddress.getLocalHost().getHostAddress());
		
		String id = (String)request.getParameter("id");
		String cantidad = (String)request.getParameter("cantidad");
		
		List<ItemListaDePrecioTO> lista = del.obtenerListaMejoresPrecios("", "", "", "", true);
		
		List<RodamientoTO> rodamientos = new ArrayList<RodamientoTO>();
		
		RodamientoTO rod = null; 
				
		for (ItemListaDePrecioTO itemlista : lista) 
		{
			rodamientos.add(itemlista.getRodamiento());
			
			if (itemlista.getRodamiento().getCodigo().equals(id))
			{
				rod = itemlista.getRodamiento();
			}
		}
		
		request.setAttribute("rodamientos", rodamientos);
		
		System.out.println("NUEVA?:" + request.getParameter("hdnNueva"));
					
		// Se desea crear una nueva solicitud
		if(request.getParameter("hdnNueva") != "" && Integer.parseInt(request.getParameter("hdnNueva")) == 1)
		{
			session.removeAttribute("solicitud");
			String dire = "/jsp/solicitudCotizacion.jsp";
			RequestDispatcher dispatcher = request.getRequestDispatcher(dire);
		    dispatcher.forward(request, response);
		}
		else
		{					
			// Es una nueva solicitud
			if(sc == null)
			{
				System.out.println("Creando nueva solicitud para el cliente");
				DomicilioTO d = new DomicilioTO();
				d.setCalle("Calle 1");
				d.setDepartamento("B");
				d.setLocalidad("Varela");
				d.setNumero("2152");
				d.setPiso("3");
				
				ClienteTO c = new ClienteTO();
				c.setTipo("INDUSTRIAS");
				c.setCuil("20999999991");
				c.setRazonSocial("Cliente de Prueba");
				
				TelefonoTO tel = new TelefonoTO("11", "42555555"); 
				
				c.setDomicilio(d);
				c.setTelefonos(new ArrayList<TelefonoTO>());
				c.getTelefonos().add(tel);
				
				
				
				//del.altaCliente(c);
							
				sc = new SolicitudDeCotizacionTO();
				sc.setClienteTO(c);
				sc.setFechaSolicitud(Date.valueOf("2014-01-06"));
				sc.setNumeroSolicitudCotizacion(55555);
				
				
				ItemSolicitudDeCotizacionTO itemSol = new ItemSolicitudDeCotizacionTO();
				itemSol.setCantidad(Integer.parseInt(cantidad));
				itemSol.setRodamientoTO(rod);
				itemSol.setTotalItemSolicitud(Integer.parseInt(cantidad) * rod.getPrecio());
				
				sc.setItemsSolCotTO(new ArrayList<ItemSolicitudDeCotizacionTO>());
				sc.getItemsSolCotTO().add(itemSol);
				
				try 
				{
					del.persistSolicitudCotizacion(sc);
				} 
				catch (Exception e) 
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}			
			}	
			
			
			
			request.setAttribute("items", sc.getItemsSolCotTO());
			session.setAttribute("solicitud", sc);
			
			System.out.println("Item agregado a la solicitud");
			System.out.println("Cantidad de items en la solicitud: "+ sc.getItemsSolCotTO().size());
			
			String dire = "/jsp/SolicitudCotizacion.jsp";
			RequestDispatcher dispatcher = request.getRequestDispatcher(dire);
		    dispatcher.forward(request, response);
		}
	}
}
